﻿Imports System.Data.SqlClient

Public Class Venta
    Dim funcion As New Funciones
    Dim cliente As New Cliente
    Dim acceso As New acceso
    Dim esNuevo As Boolean
    Dim comando As New SqlClient.SqlCommand
    Dim detalleFactura As New List(Of DetalleFactura)
    Dim funfiones As New Funciones
    Enum estado
        habilitar
        deshabiliatar

    End Enum
    Enum tipoVenta
        directa
        factura
    End Enum


    Private Sub habilitarGrupos(ByRef estado As estado)

        If estado = Venta.estado.habilitar Then

            DatosClienteGroup.Enabled = True
            DatosFacuraGroup.Enabled = True
            DetalleFacturaGroup.Enabled = True
            TipoVentaGroup.Enabled = True
            btm_guardar.Enabled = True

        Else
            DatosClienteGroup.Enabled = False
            DatosFacuraGroup.Enabled = False
            DetalleFacturaGroup.Enabled = False
            TipoVentaGroup.Enabled = False
            btm_guardar.Enabled = False
        End If

    End Sub
    Private Sub Factura_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        habilitarGrupos(Venta.estado.deshabiliatar)
        cargaCombos()
        cargaGrillaProductos()
    End Sub
    Private Sub cargaGrillaProductos()
        Dim tabla As New Data.DataTable
        tabla = acceso.leo_tabla("VistaProductos")
        DGV_ProductosStock.DataSource = tabla
        acomodarGrilla()

    End Sub


    Private Sub cargaCombos()
        acceso.cargarCombo(cmb_tipoFactura, "TipoFactura", "nombre", "idTipoFactura")
        acceso.cargarCombo(cmb_FormaPago, "TipoPago", "nombre", "idTipoPago")

        'Dim tabla As Data.DataTable
        'tabla = acceso.ejecutar("SELECT * FROM Factuas WHERE nroFactura = IDENT_CURRENT('Factuas')")
        'Dim nroFactura As String = tabla.Rows.Item(0).Item(0).ToString()
        Dim tabla As Data.DataTable
        tabla = acceso.ejecutar("SELECT MAX(nroFactura) FROM Factuas")
        Dim nroFactura As String = tabla.Rows.Item(0).Item(0).ToString()
        txt_numeroFactura.Text = nroFactura + 1


    End Sub






    Private Sub acomodarGrilla()
        DGV_ProductosStock.Columns("codProducto").HeaderText = "Codigo"
        DGV_ProductosStock.Columns("nombre").HeaderText = "Producto"
        DGV_ProductosStock.Columns("precio").HeaderText = "Precio"
        DGV_ProductosStock.Columns("descripcion").HeaderText = "Descripcion"
        DGV_ProductosStock.Columns("unidadMedida").HeaderText = "Unidad Medida"
        DGV_ProductosStock.Columns("marca").HeaderText = "Marca"
        DGV_ProductosStock.Columns("tipoProducto").Visible = False

        DGV_ProductosStock.Columns("codProducto").Visible = False
        DGV_ProductosStock.Columns("idMarca").Visible = False
        DGV_ProductosStock.Columns("idTipoProducto").Visible = False

        DGV_ProductosStock.Columns("idUnidadMedida").Visible = False
        DGV_ProductosStock.Columns("stockActual").Visible = False
        DGV_ProductosStock.Columns("stockRiesgo").Visible = False
        DGV_ProductosStock.Columns("stockDisponible").HeaderText = "Stock"
        DGV_ProductosStock.Columns("stockReservado").Visible = False


    End Sub



    Private Sub btm_nuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btm_nuevo.Click
        nuevo()


    End Sub
    Private Sub nuevo()

        habilitarGrupos(Venta.estado.deshabiliatar)
        TipoVentaGroup.Enabled = True
        DGV_DetalleFactura.Rows.Clear()
        rb_directa.Select()

        txt_cantidad.Text = ""
        lbl_MontoTotal.Text = ""
    End Sub

    Private Sub rb_directa_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rb_directa.CheckedChanged
        habilitarGrupos(Venta.estado.habilitar)
        cmb_tipoFactura.SelectedValue = 3
        cmb_tipoFactura.Enabled = False
        DatosClienteGroup.Enabled = False
        cliente = funcion.obtenerCliente(3)
        txt_nombre.Text = cliente._nombre
        txt_apellido.Text = cliente._apellido
        txt_nro_cliente.Text = cliente._idCliente
        txt_RespInscripto.Text = cliente._Responsable._nombre
        DetalleFacturaGroup.Enabled = True


    End Sub


    Private Sub rb_factura_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles rb_factura.CheckedChanged
        habilitarGrupos(Venta.estado.habilitar)

        cmb_tipoFactura.SelectedValue = 3
        cmb_tipoFactura.Enabled = False

        txt_apellido.Enabled = False
        txt_nombre.Enabled = False
        txt_nro_cliente.Enabled = False
        txt_RespInscripto.Enabled = False
        DetalleFacturaGroup.Enabled = False

    End Sub

    Private Sub tooltip1()
        ventaFacturaToolTip.SetToolTip(rb_factura, "Debe agregar un cliente, ya sea nuevo o buscarlo ")
    End Sub


    Private Sub btm_agregar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_agregar.Click
        If DGV_ProductosStock.SelectedRows.Count = 0 Then
            MessageBox.Show("Necesita seleccionar algun producto", "Atencion")
            Return
        End If
        If txt_cantidad.Text = "" Then
            MessageBox.Show("Necesita ingresar la cantidad", "Atencion")
            txt_cantidad.Focus()
            Return
        End If
        If txt_cantidad.Text >= DGV_ProductosStock.CurrentRow.Cells("stockDisponible").Value Then

            MessageBox.Show("No se pueden vender cantidades que superen el stock disponible", "Atencion")
            Return
        End If
        Dim existe As Boolean = False
        Dim IdProducto As Integer = DGV_ProductosStock.CurrentRow.Cells("codProducto").Value
        For i As Integer = 0 To DGV_DetalleFactura.Rows.Count - 1 Step 1

            If IdProducto = DGV_DetalleFactura.Rows(i).Cells("codigo").Value Then
                existe = True
                '' MessageBox.Show("El producto ya se cargo. Desea Modificarlo?", "Aviso", MessageBoxButtons.OKCancel)
                If MessageBox.Show("El producto ya se cargo. Desea Modificarlo?", "Aviso", MessageBoxButtons.OKCancel) = Windows.Forms.DialogResult.OK Then
                    DGV_DetalleFactura.Rows.Remove(DGV_DetalleFactura.Rows(i))
                    existe = False
                    Exit For
                End If

            End If


        Next


        If existe = False Then
            Dim detalleFactura As New DetalleFactura
            detalleFactura._producto._codProducto = DGV_ProductosStock.CurrentRow.Cells("codProducto").Value
            detalleFactura._producto._nombre = DGV_ProductosStock.CurrentRow.Cells("nombre").Value
            detalleFactura._producto._precio = DGV_ProductosStock.CurrentRow.Cells("precio").Value
            detalleFactura._cantidad = txt_cantidad.Text
            detalleFactura._producto._marca._idMarca = DGV_ProductosStock.CurrentRow.Cells("idMarca").Value
            detalleFactura._producto._marca._nombre = DGV_ProductosStock.CurrentRow.Cells("Marca").Value
            detalleFactura._subTotal = (txt_cantidad.Text * DGV_ProductosStock.CurrentRow.Cells("precio").Value)

            DGV_DetalleFactura.Rows.Add(detalleFactura._producto._codProducto, detalleFactura._producto._nombre, detalleFactura._producto._marca._nombre, detalleFactura._producto._precio, detalleFactura._cantidad, detalleFactura._subTotal, detalleFactura._producto._marca._idMarca)
            sumaTotal()
        End If



    End Sub


    Private Sub sumaTotal()
        Dim total As Double
        ''  Dim col As Integer = Me.DataGridView_DetalleFactura.cell
        For Each row As DataGridViewRow In DGV_DetalleFactura.Rows
            total += Val(row.Cells("subtotal").Value)

        Next
        If total <> Nothing Then
            lbl_MontoTotal.Text = total.ToString
        End If
    End Sub


    Private Sub txt_cantidad_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_quitar.Click
        If DGV_DetalleFactura.RowCount > 0 Then
            DGV_DetalleFactura.Rows.Remove(DGV_DetalleFactura.SelectedRows(0))
            sumaTotal()
        End If

    End Sub

    Private Sub btm_guardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btm_guardar.Click


        If DGV_DetalleFactura.Rows.Count <> 0 Then
            Dim factura As New ClaseFactura()


            factura._fecha = DTP_fecha.Value
            factura._tipo = cmb_tipoFactura.SelectedValue
            factura._formaPago = cmb_FormaPago.SelectedValue
            factura._total = lbl_MontoTotal.Text
            factura._nroCliente = txt_nro_cliente.Text
            For i As Integer = 0 To DGV_DetalleFactura.Rows.Count - 1 Step 1
                Dim detalle As New DetalleFactura()

                detalle._producto._codProducto = DGV_DetalleFactura.Rows(i).Cells("codigo").Value
                detalle._producto._nombre = DGV_DetalleFactura.Rows(i).Cells("producto").Value
                detalle._producto._marca._nombre = DGV_DetalleFactura.Rows(i).Cells("marca").Value
                detalle._producto._precio = DGV_DetalleFactura.Rows(i).Cells("precio").Value
                detalle._cantidad = DGV_DetalleFactura.Rows(i).Cells("cantidad").Value
                detalle._subTotal = DGV_DetalleFactura.Rows(i).Cells("subtotal").Value
                detalle._producto._marca._idMarca = Int(DGV_DetalleFactura.Rows(i).Cells("idmarca").Value)


                factura._detalleFactura.Add(detalle)

            Next

            acceso.generarFactura(factura)
            nuevo()
            cargaGrillaProductos()

        Else
            MessageBox.Show("Ingrese al menos 1 elemento a  la factura", "Aviso", MessageBoxButtons.OK)
        End If



    End Sub

    Private Sub txt_cantidad_KeyPress(ByVal eventSender As System.Object, ByVal eventArgs As System.Windows.Forms.KeyPressEventArgs) Handles txt_cantidad.KeyPress
        eventArgs.Handled = funfiones.validarDouble(eventArgs.KeyChar, txt_cantidad.Text & CChar(eventArgs.KeyChar))
    End Sub


    Private Sub btm_Salir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btm_Salir.Click
        If MessageBox.Show("Esta seguro que desea salir?", "Aviso", MessageBoxButtons.OKCancel) = 1 Then
            Close()


        End If

    End Sub

    Private Sub btmNuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btmNuevo.Click
        Dim abmClientes As New ABM_Cliente()
        abmClientes.ShowDialog()

        cliente = funcion.obtenerCliente(Nothing)
        txt_nombre.Text = cliente._nombre
        txt_apellido.Text = cliente._apellido
        txt_nro_cliente.Text = cliente._idCliente
        txt_RespInscripto.Text = cliente._Responsable._nombre
        DetalleFacturaGroup.Enabled = True

    End Sub

    Private Sub rb_factura_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles rb_factura.MouseEnter
        tooltip1()
    End Sub

    Private Sub btmBuscar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btmBuscar.Click
        Dim buscarCliente As New BuscarCliente

        cliente = buscarCliente.abrirformulario(Nothing)
        txt_nombre.Text = cliente._nombre
        txt_apellido.Text = cliente._apellido
        txt_nro_cliente.Text = cliente._idCliente
        txt_RespInscripto.Text = cliente._Responsable._nombre
        If cliente._Responsable._nombre = "Resp. Inscripto" Then
            cmb_tipoFactura.SelectedValue = 1
        Else
            cmb_tipoFactura.SelectedValue = 2
        End If
        DetalleFacturaGroup.Enabled = True
    End Sub

End Class